﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Entidades.Sistema.Produccion
{
    public abstract class DiagramacionEstado : AbstraccionEstado
    {
        protected DiagramacionProduccion _contexto;

        public DiagramacionEstado(DiagramacionProduccion contexto)
        {
            _contexto = contexto;
        }

        public override string descrip
        {
            get
            {
                return _contexto.proximosEstados.FirstOrDefault(x => x.idEstado == idEstado).descrip;
            }
        }

        public override Nullable<DateTime> fecha
        {
            get
            {
                if (_contexto.Estados.Count > 0)
                    return _contexto.Estados.OrderBy(e => e.Fecha).LastOrDefault().Fecha;
                else
                    return null;
            }
        }

        public void cambioEstado(DiagramacionEstado proximoEstado, string comentario)
        {
            if (proximosEstados.FirstOrDefault(
                    e => e.GetType().Equals(proximoEstado.GetType())) == null)
                throw new Exception("No se puede cambiar a este estado");

            _contexto.Estado = proximoEstado;           
            
            EstadoDiagramacion estado = new EstadoDiagramacion();
            Seguridad.Session s = Seguridad.Session.ObtenerInstancia();
            estado.Id_Usuario = "lucas.farruggia";
            estado.IdEstado = _contexto.Estado.idEstado;
            estado.Fecha = DateTime.Today;

            if (comentario != null)
                estado.Comentario = comentario;

            _contexto.AgregarEstado(estado);
        }
    }
}
